RestTemplate এবং WebClient এর জন্য Unit Testing

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) Testing Spring Boot Clients |
111
111

Spring Boot-এ RestTemplate এবং WebClient এর জন্য Unit Testing করতে হলে আপনাকে Mocking টুল (যেমন: Mockito) ব্যবহার করতে হবে। নিচে RestTemplate এবং WebClient-এর জন্য Unit Testing-এর বিস্তারিত উদাহরণ দেওয়া হলো।


RestTemplate Unit Testing

ধাপ ১: ডিপেনডেন্সি যোগ করুন

JUnit এবং Mockito ব্যবহার করুন।

Maven Dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

ধাপ ২: RestTemplate ব্যবহার করা সার্ভিস ক্লাস

import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ApiService {

    private final RestTemplate restTemplate;

    public ApiService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String fetchData() {
        String url = "https://api.example.com/data";
        return restTemplate.getForObject(url, String.class);
    }
}

ধাপ ৩: RestTemplate এর জন্য Unit Test

import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate;

import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
public class ApiServiceTest {

    @Mock
    private RestTemplate restTemplate;

    @InjectMocks
    private ApiService apiService;

    @Test
    public void testFetchData() {
        // Mock response
        String mockResponse = "Mocked API Response";
        String url = "https://api.example.com/data";

        // Define behavior for mock RestTemplate
        when(restTemplate.getForObject(url, String.class)).thenReturn(mockResponse);

        // Call the method
        String result = apiService.fetchData();

        // Assertions
        assertEquals(mockResponse, result);
        verify(restTemplate, times(1)).getForObject(url, String.class);
    }
}

WebClient Unit Testing

ধাপ ১: WebClient ব্যবহার করা সার্ভিস ক্লাস

import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Service
public class ApiService {

    private final WebClient webClient;

    public ApiService(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://api.example.com").build();
    }

    public Mono<String> fetchData() {
        return webClient.get()
                .uri("/data")
                .retrieve()
                .bodyToMono(String.class);
    }
}

ধাপ ২: WebClient এর জন্য Unit Test

WebClient-এর জন্য WebClient.Builder` Mock করা হয়।

import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.InjectMocks;
import org.mockito.MockitoAnnotations;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.ClientResponse;
import reactor.core.publisher.Mono;

import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

public class ApiServiceTest {

    @Mock
    private WebClient.Builder webClientBuilder;

    @Mock
    private WebClient webClient;

    @Mock
    private WebClient.RequestHeadersUriSpec<?> requestHeadersUriSpec;

    @Mock
    private WebClient.ResponseSpec responseSpec;

    @InjectMocks
    private ApiService apiService;

    @Test
    public void testFetchData() {
        // Mock API Response
        String mockResponse = "Mocked API Response";

        // Mock WebClient behavior
        when(webClientBuilder.baseUrl("https://api.example.com")).thenReturn(webClientBuilder);
        when(webClientBuilder.build()).thenReturn(webClient);
        when(webClient.get()).thenReturn(requestHeadersUriSpec);
        when(requestHeadersUriSpec.uri("/data")).thenReturn(requestHeadersUriSpec);
        when(requestHeadersUriSpec.retrieve()).thenReturn(responseSpec);
        when(responseSpec.bodyToMono(String.class)).thenReturn(Mono.just(mockResponse));

        // Call the method
        String result = apiService.fetchData().block();

        // Assertions
        assertEquals(mockResponse, result);
        verify(webClient, times(1)).get();
        verify(requestHeadersUriSpec, times(1)).uri("/data");
    }
}

MockMVC ব্যবহার (RestTemplate বা WebClient মিলিত হলে)

Spring Boot ক্লায়েন্ট API ইন্টিগ্রেশন টেস্টের জন্য MockMVC ব্যবহার করতে পারেন।

MockMVC উদাহরণ:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureMockMvc
public class ApiControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetData() throws Exception {
        mockMvc.perform(get("/data"))
                .andExpect(status().isOk());
    }
}

সংক্ষেপে

  • RestTemplate এর জন্য Mockito ব্যবহার করে getForObject, postForObject ইত্যাদি মক করা হয়।
  • WebClient এর জন্য WebClient.Builder এবং সংশ্লিষ্ট মেথডগুলো Mock করতে হয়।
  • Unit Testing-এর জন্য Spring Boot-এ JUnit এবং Mockito ব্যবহার করলে টেস্টিং সহজ হয়।

এভাবে আপনি RestTemplate এবং WebClient এর জন্য Unit Testing করতে পারেন।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion